package uniandes.cupi2.photoViewer.mundo;

import java.util.Date;

import uniandes.cupi2.photoViewer.listas.IListaEtiqueta;
import uniandes.cupi2.photoViewer.listas.IListaFoto;

/**
 * Nodo Album, clase que modela un album
 * @author 
 */
public class Album 
{
    /**
     * Es el nombre del album	
     */
	private String nombre;
	/**
	 * Es la fecha de adicion del album
	 */
	private Date fecha;
	/**
	 * Es el siguiente album
	 */
	private Album siguiente;
	/**
	 * Es la liasta de fotos del album
	 */
	private Album anterior;
	
	private IListaFoto fotos;
	/**
	 * Es la lista de etiquetas 
	 */
	private IListaEtiqueta etiquetas;
	// Constructor
	/**
	 * Representa al album del Photoviewer
	 * @param nNombre. Es el nombre del album
	 */
	public Album(String nNombre)
	{	
		nombre= nNombre;
		fecha = new Date();
		etiquetas = new ListaEtiquetas();
		
	}
	/**
	 * Agrega una foto a album
	 * @param aAgregar. Es la foto a agregar
	 * @return true si se ha agregado la foto y false si no
	 */
	public boolean existeEtiqueta(String nEtiqueta)
	{
		return etiquetas.existeEtiqueta(nEtiqueta);
	}
	
	public boolean existeFoto(String nombreFoto)
	{
		return fotos.existeFoto(nombreFoto);
	}
	
	public IListaEtiqueta getEtiquetas( )
	{
		return etiquetas;
	}
	
	public boolean agregarFoto( Foto aAgregar )
	{
		return fotos.adicionar(aAgregar);
	}
	
	public Foto buscarFotoPorEtiqueta(String nEtiqueta)
	{
		
		Foto nuevo= (Foto) fotos.buscarFotoPorEtiqueta(nEtiqueta);
		
		return nuevo;
		
		
	}

	/**
	 * Retorna del nombre del album
	 * @return el nombre 
	 */
	public String getNombre()
	{
		return nombre;
	}
  /**
   * Cambia el nombre del album por uno que entra por parametro
   * @param nombre. Es el nombre nuevo
   */
	public void setNombre(String nombre)
	{
		this.nombre = nombre;
	}
    /**
     * Retona la fecha de adicion del album
     * @return. la fecha de adicion
     */
	public Date getFecha()
	{
		return fecha;
	}
    /**
     * Cambia la fecha de adicion del album
     * @param fecha
     */
	public void setFecha(Date fecha)
	{
		this.fecha = fecha;
	}
    /**
     * Da el siguiente album
     * @return el siguiente album
     */
	public Album darSiguiente()
	{
		return siguiente;
	}
    /**
     * Cambia el siguiente album por uno que entra por parametro
     * @param siguiente. Es el siguiente album
     */
	public void cambiarSiguiente(Album siguiente) 
	{
		this.siguiente = siguiente;
	}
	/**
	 * Agrega una etiqueta a un album 
	 * @param nEtiqueta. Es la etiqueta a agregar 
	 * @return
	 */
	public Album darAnterior()
	{
		return anterior;
	}
	
	public void cambiarAnterior(Album anterior)
	{
		this.anterior=anterior;
	}
	
	public void insertarAntes( Album aAgregar )
    {
        if( anterior != null )
            anterior.siguiente = aAgregar;
        aAgregar.anterior = anterior;
        aAgregar.siguiente = this;
        anterior = aAgregar;
    }
	
	public void insertarDespues( Album aAgregar )
    {
        aAgregar.siguiente = siguiente;
        if( siguiente != null )
            siguiente.anterior = aAgregar;
        aAgregar.anterior = this;
        siguiente = aAgregar;
    }
	
	public boolean agregarEtiquetaAlbum(String nEtiqueta)
	{
		Etiqueta nueva = new Etiqueta(nEtiqueta);
		etiquetas.adicionar(nueva);
		return true;
	}

	
    /**
     * Elimina una etiqueta de un album
     * @param nEtiqueta. Es el nombre de la etiqueta
     * @return
     */
	public boolean eliminarEtiquetaAlbum( String nEtiqueta)
	{

		boolean elimino = false;
		for(int i = 0; i < etiquetas.darLongitud(); i++)
		{
			Etiqueta nueva=null;
			String nomEtiqueta = nueva.darNombreEtiqueta();
			//if(nomEtiqueta.equalsIgnoreCase(etiquetas.darNombreElemento()))
			{
				elimino = true;
				etiquetas.eliminar(nEtiqueta);
			}
			//else
			{
				elimino = false;
			}
		}
		return elimino;
	}
	

	

	
	

}
